Left Join এবং Cross Join হল SQL এবং LINQ-এ ব্যবহৃত দুটি ভিন্ন ধরনের জয়েন অপারেশন। এগুলি ডেটাবেস থেকে ডেটা যুক্ত করার জন্য ব্যবহৃত হয়, তবে তাদের কাজের ধরন এবং ফলাফল ভিন্ন।
Left Join
Left Join হল একটি জয়েন টাইপ যেখানে প্রথম টেবিলের সব রেকর্ড (বাম পাশে থাকা টেবিল) এবং দ্বিতীয় টেবিলের সেগুলি রেকর্ড নেয়া হয় যা প্রথম টেবিলের সঙ্গে মেলে। যদি দ্বিতীয় টেবিলে কোনও মেলানো রেকর্ড না থাকে, তবে সেই ক্ষেত্রের জন্য NULL মান ব্যবহার করা হয়। এটি সাধারণত Left Outer Join নামে পরিচিত।
Left Join এর মাধ্যমে আপনি বাম টেবিলের সমস্ত ডেটা এবং মিলে যাওয়া ডান টেবিলের ডেটা পেতে পারেন।
Left Join এর সিনট্যাক্স (SQL):
SELECT table1.column1, table1.column2, table2.column1
FROM table1
LEFT JOIN table2
ON table1.common_field = table2.common_field;
এখানে, table1 এবং table2 হল দুটি টেবিল, এবং common_field হল সেই ফিল্ড যা উভয় টেবিলে মিলিয়ে রেকর্ডগুলো জয়েন করা হয়।
Left Join এর উদাহরণ
ধরা যাক, আমাদের দুটি টেবিল আছে: Customers এবং Orders। আমরা Customers টেবিলের সমস্ত ডেটা এবং তাদের Orders টেবিল থেকে অর্ডার সম্পর্কিত ডেটা বের করতে চাই।
Customers টেবিল:
| CustomerID | CustomerName |
|---|---|
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie |
Orders টেবিল:
| OrderID | CustomerID | OrderAmount |
|---|---|---|
| 101 | 1 | 500 |
| 102 | 2 | 700 |
SQL Query:
SELECT Customers.CustomerID, Customers.CustomerName, Orders.OrderAmount
FROM Customers
LEFT JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;
ফলাফল:
| CustomerID | CustomerName | OrderAmount |
|---|---|---|
| 1 | Alice | 500 |
| 2 | Bob | 700 |
| 3 | Charlie | NULL |
এখানে, Charlie গ্রাহকের কোন অর্ডার নেই, তাই তার জন্য OrderAmount NULL হয়ে গেছে।
Cross Join
Cross Join হল একটি জয়েন টাইপ যা দুটি টেবিলের মধ্যে Cartesian Product তৈরি করে। অর্থাৎ, এটি প্রথম টেবিলের প্রতিটি রেকর্ডের সঙ্গে দ্বিতীয় টেবিলের প্রতিটি রেকর্ড যুক্ত করে। এই জয়েনের ফলে যে সংখ্যা তৈরি হয় তা হবে প্রথম টেবিলের রেকর্ডের সংখ্যা গুণ দ্বিতীয় টেবিলের রেকর্ডের সংখ্যা।
Cross Join এর মাধ্যমে আপনি কোন শর্ত ছাড়াই সমস্ত সম্ভাব্য রেকর্ডের সংমিশ্রণ দেখতে পাবেন।
Cross Join এর সিনট্যাক্স (SQL):
SELECT table1.column1, table2.column1
FROM table1
CROSS JOIN table2;
এখানে, table1 এবং table2 হল দুটি টেবিল। CROSS JOIN ব্যবহারের মাধ্যমে আমরা উভয় টেবিলের সব রেকর্ডের সংমিশ্রণ পেয়ে থাকি।
Cross Join এর উদাহরণ
ধরা যাক, আমাদের দুটি টেবিল আছে: Colors এবং Sizes। আমরা Colors এবং Sizes টেবিলের মধ্যে সব সম্ভাব্য সংমিশ্রণ দেখতে চাই।
Colors টেবিল:
| Color |
|---|
| Red |
| Green |
| Blue |
Sizes টেবিল:
| Size |
|---|
| Small |
| Medium |
| Large |
SQL Query:
SELECT Colors.Color, Sizes.Size
FROM Colors
CROSS JOIN Sizes;
ফলাফল:
| Color | Size |
|---|---|
| Red | Small |
| Red | Medium |
| Red | Large |
| Green | Small |
| Green | Medium |
| Green | Large |
| Blue | Small |
| Blue | Medium |
| Blue | Large |
এখানে, Colors এবং Sizes টেবিলের সমস্ত রেকর্ডের সংমিশ্রণ তৈরি হয়েছে।
Left Join এবং Cross Join এর মধ্যে পার্থক্য
- Left Join-এ বাম টেবিলের সব রেকর্ড থাকবে এবং যেসব রেকর্ড ডান টেবিলের সাথে মেলে, তাদের সংযুক্ত করা হবে। যেসব রেকর্ড ডান টেবিলের সাথে মেলে না, তাদের জন্য NULL মান দেখা যাবে।
- Cross Join-এ কোনো শর্ত নেই, এবং এটি দুটি টেবিলের Cartesian Product তৈরি করে, যার ফলে প্রথম টেবিলের প্রতিটি রেকর্ডের সাথে দ্বিতীয় টেবিলের প্রতিটি রেকর্ড মিলিত হয়।
LINQ-এ Left Join
LINQ-এ Left Join করার জন্য Group Join পদ্ধতি ব্যবহার করা হয়। এটি মূলত Left Outer Join এর সমতুল্য। এখানে একটি উদাহরণ দেওয়া হল:
var leftJoin = from customer in customers
join order in orders on customer.CustomerID equals order.CustomerID into customerOrders
from order in customerOrders.DefaultIfEmpty()
select new
{
customer.CustomerID,
customer.CustomerName,
OrderAmount = order?.OrderAmount ?? 0
};
foreach (var item in leftJoin)
{
Console.WriteLine($"CustomerID: {item.CustomerID}, CustomerName: {item.CustomerName}, OrderAmount: {item.OrderAmount}");
}
এখানে, DefaultIfEmpty() ব্যবহার করা হয়েছে যাতে NULL মান দেয়া যায় যদি কোনো অর্ডার না থাকে।
LINQ-এ Cross Join
LINQ-এ Cross Join তৈরি করার জন্য SelectMany পদ্ধতি ব্যবহার করা হয়। এটি প্রথম টেবিলের সব রেকর্ডের সাথে দ্বিতীয় টেবিলের সব রেকর্ডের সংমিশ্রণ তৈরি করে।
var crossJoin = from color in colors
from size in sizes
select new { color, size };
foreach (var item in crossJoin)
{
Console.WriteLine($"Color: {item.color}, Size: {item.size}");
}
এখানে, প্রথম টেবিল colors এবং দ্বিতীয় টেবিল sizes এর সব রেকর্ডের সংমিশ্রণ তৈরি হয়েছে।
সারাংশ
- Left Join: বাম টেবিলের সমস্ত রেকর্ড এবং ডান টেবিলের মেলানো রেকর্ডগুলি ফেরত দেয়, যেখানে ডান টেবিলের মেলানো রেকর্ড না থাকলে NULL দেখানো হয়।
- Cross Join: দুটি টেবিলের মধ্যে সব সম্ভাব্য সংমিশ্রণ তৈরি করে। এটি Cartesian Product তৈরি করে এবং কোনো শর্ত থাকে না।